package city.spring.service.mealService;

import city.spring.domain.entity.mealService.FoodInfoEntity;
import com.baomidou.mybatisplus.extension.service.IService;

import java.time.LocalDate;
import java.time.LocalTime;
import java.util.List;

/**
 * 食品信息 Service
 *
 * @author yzh
 */
public interface FoodInfoService extends IService<FoodInfoEntity> {

    /**
     * 业务处理：保存一个食物信息
     *
     * @param entity 食物信息
     */
    void saveFoodInfo(FoodInfoEntity entity);

    /**
     * 业务处理：修改一个食物信息
     *
     * @param entity 食物信息
     */
    void updateFoodInfo(FoodInfoEntity entity);

    /**
     * 业务处理：删除一个食物信息
     *
     * @param primaryKey 主键ID
     */
    void deleteFoodInfo(String primaryKey);

    /**
     * 业务处理：删除多个食物信息
     *
     * @param primaryKeys 主键ID列表
     */
    void deleteFoodInfo(List<String> primaryKeys);

    /**
     * 加载菜品关联疾病
     *
     * @param entity 菜品
     */
    void loadDisease(FoodInfoEntity entity);

    /**
     * 加载多个菜品关联疾病
     *
     * @param entities 菜品列表
     */
    void loadDisease(List<FoodInfoEntity> entities);

    /**
     * 关联表的维护
     *
     * @param entity 菜品
     */
    void setFoodDisease(FoodInfoEntity entity);

    /**
     * 更新一个菜品疾病关联关系
     *
     * @param entity 菜品
     */
    void updateFoodDisease(FoodInfoEntity entity);

    /**
     * 删除一个菜品疾病关联关系
     *
     * @param entity 菜品
     */
    void deleteFoodDisease(FoodInfoEntity entity);

    /**
     * 获取周期的菜品列表
     *
     * @param recipesId 周期id
     * @return 菜品列表
     */
    List<FoodInfoEntity> getRecipesFood(String recipesId);

    /**
     * 获取无关联疾病的菜品
     *
     * @param diseaseId 关联疾病列表
     * @return 菜品列表
     */
    List<FoodInfoEntity> getNormalDiseaseFood(List<String> diseaseId);

    /**
     * 获取关联疾病的菜品
     *
     * @param diseaseId            关联疾病列表
     * @param forbiddenOrRecommend 菜品关联状态
     * @return 菜品列表
     */
    List<FoodInfoEntity> getDiseaseFood(List<String> diseaseId, int forbiddenOrRecommend);

    /**
     * 获取时间范围内的关联疾病的菜品
     *
     * @param diseaseId            关联疾病列表
     * @param date                 菜品疾病关联状态
     * @param startTime            开始时间
     * @param endTime              结束时间
     * @param forbiddenOrRecommend 菜品疾病关联状态
     * @return 菜品列表
     */
    List<FoodInfoEntity> getCurrentDiseaseFood(List<String> diseaseId, LocalDate date, LocalTime startTime, LocalTime endTime, int forbiddenOrRecommend);

    /**
     * 获取时间范围内的无关联疾病菜品
     *
     * @param diseaseId 关联疾病列表
     * @param date      筛选日期
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 菜品列表
     */
    List<FoodInfoEntity> getCurrentNormalFood(List<String> diseaseId, LocalDate date, LocalTime startTime, LocalTime endTime);

    /**
     * 获取当前时间范围内的菜品
     *
     * @param date      筛选日期
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 菜品列表
     */
    List<FoodInfoEntity> getCurrentFoodAll(LocalDate date, LocalTime startTime, LocalTime endTime);

    /**
     * 获取套餐菜品
     *
     * @param mealWeekId 餐次id
     * @param mealTurn   套餐编号
     * @return 菜品列表
     */
    List<FoodInfoEntity> getMealTurnFood(String mealWeekId, String mealTurn);

    /**
     * 获取周期内的菜品
     *
     * @param date 筛选日期
     * @return 菜品列表
     */
    List<FoodInfoEntity> getWeekFoodAll(LocalDate date);

    List<String> getMealTurnFoodId(String mealId, String MealTurn);

}
